/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package py.una.pol.tesis.ii.wsrest;

import com.google.gson.Gson;
import com.sun.jersey.api.view.Viewable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import org.apache.log4j.Logger;
import py.una.informatica.dto.Regla;
import py.una.informatica.dto.Respuesta;
import py.una.informatica.dto.SignoComparacion;

/**
 * REST Web Service
 *
 * @author Leandro
 */
@Path("reglas")
public class ReglasResource {

    /**
     * Creates a new instance of PacientesResource
     */
    public ReglasResource() {
    }
    
    @GET
    @Path("/index")
    @Produces("text/html")
    public Response index(@Context HttpServletRequest req) {
        Map<String, Object> map = new HashMap<String, Object>();        
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.index: " + session.getId());
            
            List<String> permisos = new ArrayList<String>();
            permisos.add("P1");
            permisos.add("P2");
            permisos.add("P3");
            permisos.add("P4");                        
            
            map.put("permisos", permisos);
            map.put("usuario", "leandrol");            
            
        } catch (Exception e) {
            Logger.getLogger("").info("Error al mostrar el ui reglas: ", e);
        }

        return Response.ok(new Viewable("/reglas", map)).build();
    }
    
    @GET
    @Path("/paciente/diagnostico/{id}")
    @Produces("text/html")
    public Response pacienteDiagnostico(@Context HttpServletRequest req, @PathParam("id") String id) {
        Map<String, Object> map = new HashMap<String, Object>();
        List<SignoComparacion> signos = new ArrayList<SignoComparacion>();
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.index: " + session.getId());
            
            List<String> permisos = new ArrayList<String>();
            permisos.add("P1");
            permisos.add("P2");
            permisos.add("P3");
            permisos.add("P4");
            
            signos.add(new SignoComparacion("1", "<", "Menor que"));
            signos.add(new SignoComparacion("2", ">", "Mayor que"));
            signos.add(new SignoComparacion("3", "<=", "Menor o igual que"));
            signos.add(new SignoComparacion("4", ">=", "Mayor o igual que"));
            signos.add(new SignoComparacion("5", "=", "Igual que"));
            
            map.put("permisos", permisos);
            map.put("usuario", "leandrol");
            map.put("idDiagnosticoPaciente", id);
            map.put("signos", signos);
            
        } catch (Exception e) {
            Logger.getLogger("").info("Error al mostrar el ui reglas: ", e);
        }

        return Response.ok(new Viewable("/regla-nueva", map)).build();
    }    

    @POST
    public String crearRegla(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);

            Logger.getLogger("").info("Session, ReglasResource.crearRegla: " + session.getId());

            Logger.getLogger("").info("Entrada crearRegla: " + entrada);

            Regla regla = gson.fromJson(entrada, Regla.class);
            Logger.getLogger("").info("Clase Regla: " + regla.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Regla creada correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta crearRegla: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al crear la regla, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en crearRegla", e);
        }

        return respuestaJson;
    }

    @DELETE
    @Path("{id}")
    public String deleteRegla(@Context HttpServletRequest req, @PathParam("id") String id) {

        return "";
    }

    @GET
    @Path("{id}")
    public String getRegla(@Context HttpServletRequest req, @PathParam("id") String id) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";

        List<Object> reglas = new ArrayList<Object>();
        Regla regla1 = null;
        Regla regla2 = null;

        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.getRegla: " + session.getId());

            Logger.getLogger("").info("Entrada getRegla, id: " + id);
            if (id.equals("1")) {
                regla1 = new Regla("1", "12", "", "<, Menor que", "1");
                reglas.add(regla1);
            } else {
                regla2 = new Regla("2", "14", "", ">, Mayor que", "1");
                reglas.add(regla2);
            }

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(reglas);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getRegla: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al obtener regla.");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en getRegla", e);
        }

        return respuestaJson;
    }

    @GET
    public String getReglas(@Context HttpServletRequest req) {
        Respuesta respuesta = new Respuesta();
        Regla regla1;
        Regla regla2;
        List<Object> reglas = new ArrayList<Object>();
        Gson gson = new Gson();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.getReglas: " + session.getId());

            regla1 = new Regla("1", "12", "", "<, Menor que", "1");
            regla2 = new Regla("2", "14", "", ">, Mayor que", "1");

            reglas.add(regla1);
            reglas.add(regla2);

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(reglas);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getReglas: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al listar las reglas");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getReglas", e);
        }
        return respuestaJson;
    }

    @GET
    @Path("signos")
    public String getSignosComparacion(@Context HttpServletRequest req) {
        Respuesta respuesta = new Respuesta();
        SignoComparacion signo1;
        SignoComparacion signo2;
        List<Object> signos = new ArrayList<Object>();
        Gson gson = new Gson();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.getSignosComparacion: " + session.getId());

            signo1 = new SignoComparacion("1", "<", "Menor que");
            signo2 = new SignoComparacion("2", ">", "Mayor que");

            signos.add(signo1);
            signos.add(signo2);

            respuesta.setEstado("0");
            respuesta.setMensaje("OK");
            respuesta.setDato(signos);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta getSignosComparacion: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al listar los Signos");
            respuesta.setDato(null);
            Logger.getLogger("").error("Error en getSignosComparacion", e);
        }
        return respuestaJson;
    }

    @PUT
    public String editarRegla(@Context HttpServletRequest req, String entrada) {
        Gson gson = new Gson();
        Respuesta respuesta = new Respuesta();
        String respuestaJson = "";
        try {
            HttpSession session = req.getSession(true);
            Logger.getLogger("").info("Session, ReglasResource.editarRegla: " + session.getId());

            Logger.getLogger("").info("Entrada editarRegla: " + entrada);

            Regla regla = gson.fromJson(entrada, Regla.class);
            Logger.getLogger("").info("Clase Regla: " + regla.toString());

            respuesta.setEstado("0");
            respuesta.setMensaje("Regla editada correctamente.");
            respuesta.setDato(null);

            respuestaJson = gson.toJson(respuesta);
            Logger.getLogger("").info("Respuesta editarRegla: " + respuestaJson);
        } catch (Exception e) {
            respuesta.setEstado("-1");
            respuesta.setMensaje("Error al editar la regla, intente de nuevo más tarde");
            respuesta.setDato(null);
            Logger.getLogger("").info("Error en editarRegla: ", e);
        }

        return respuestaJson;
    }
}
